/**
 * Copyright &copy; 2012-2014  All rights reserved.
 */
package com.manage.util;

import java.util.List;
import java.util.Map;

import com.beans.SysDict;
import com.commons.json.JsonWrapper;
import com.commons.util.CacheUtils;
import com.commons.util.SpringContextHolder;
import com.services.SysDictService;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

/**
 * 字典工具类
 *
 * @author FCHEN
 * @version 2013-5-29
 */
public class DictUtils {

    private static SysDictService dictService = SpringContextHolder.getBean(SysDictService.class);

    public static final String CACHE_DICT_MAP = "dictMap";

//	public static String getDictLabel(String value, String type, String defaultValue){
//		if (StringUtils.isNotBlank(type) && StringUtils.isNotBlank(value)){
//			for (Dict dict : getDictList(type)){
//				if (type.equals(dict.getType()) && value.equals(dict.getValue())){
//					return dict.getLabel();
//				}
//			}
//		}
//		return defaultValue;
//	}

//	public static String getDictLabels(String values, String type, String defaultValue){
//		if (StringUtils.isNotBlank(type) && StringUtils.isNotBlank(values)){
//			List<String> valueList = Lists.newArrayList();
//			for (String value : StringUtils.split(values, ",")){
//				valueList.add(getDictLabel(value, type, defaultValue));
//			}
//			return StringUtils.join(valueList, ",");
//		}
//		return defaultValue;
//	}

//	public static String getDictValue(String label, String type, String defaultLabel){
//		if (StringUtils.isNotBlank(type) && StringUtils.isNotBlank(label)){
//			for (Dict dict : getDictList(type)){
//				if (type.equals(dict.getType()) && label.equals(dict.getLabel())){
//					return dict.getValue();
//				}
//			}
//		}
//		return defaultLabel;
//	}

    public static List<SysDict> getDictList(String type) {
        @SuppressWarnings("unchecked")
        Map<String, List<SysDict>> dictMap = (Map<String, List<SysDict>>) CacheUtils.get(CACHE_DICT_MAP);
        if (dictMap == null) {
            dictMap = Maps.newHashMap();
            for (SysDict dict : dictService.findAllList(new SysDict())) {
                List<SysDict> dictList = dictMap.get(dict.getParentName());
                if (dictList != null) {
                    dictList.add(dict);
                } else {
                    dictMap.put(dict.getParentName(), Lists.newArrayList(dict));
                }
            }
            CacheUtils.put(CACHE_DICT_MAP, dictMap);
        }
        List<SysDict> dictList = dictMap.get(type);
        if (dictList == null) {
            dictList = Lists.newArrayList();
        }
        return dictList;
    }

    /**
     * 返回字典列表（JSON）
     *
     * @param type
     * @return
     */
    public static String getDictListJson(String type) {
        return JsonWrapper.toJSONString(getDictList(type));
    }

}
